#include <stdio.h>
#include <algorithm>
using namespace std;
#define N 110
#define L 1000000
int d[N*N], s[N], h, b;
int val(int n) { return (n>>7)+(n&127); }
int sw(int i, int j)
{
	int e=0;
	e-=abs(s[i/b]-h)+abs(s[j/b]-h);
	s[i/b]+=val(d[j])-val(d[i]);
	s[j/b]+=val(d[i])-val(d[j]);
	e+=abs(s[i/b]-h)+abs(s[j/b]-h);
	swap(d[i], d[j]);
	return e;
}
int main()
{
	int n, i, j, k, e, t, l;
	for(scanf("%d", &n), k=0, i=0; i<=n; i++)
		for(j=i; j<=n; d[k++]=(i<<7)|j, j++);
	for(b=(n+2)/2, h=n*(n+2)/2, e=1; e; )
	{
		random_shuffle(d, d+k);
		for(i=0; i<=n; s[i]=0, i++);
		for(i=0; i<k; s[i/b]+=val(d[i]), i++);
		for(e=0, i=0; i<=n; e+=abs(s[i]-h), i++);
		for(l=0; l<L; l++)
		{
			i=rand()%k;
			j=rand()%k;
			t=sw(i, j);
			if(t<0) e+=t;
			else sw(i, j);
		}
	}
	for(i=0; i<k; i++)
	{
		printf("%d %d", d[i]>>7, d[i]&127);
		if((i+1)%((n+2)/2)==0) printf("\n");
		else printf(" ");
	}
	return 0;
}